<?php

/**
 * 支付宝
 * set_modules 防止非法操作
 */

/* 模块的基本信息 */
if (isset($set_modules) && $set_modules == TRUE)
{
    $i = isset($modules) ? count($modules) : 0;

    /* 代码 */
    $modules[$i]['code']    = basename(__FILE__, '.php');

    /* 描述对应的语言项 */
    $modules[$i]['desc']    = '支付宝网站(www.alipay.com) 是国内先进的网上支付平台。<br/>支付宝收款接口：在线即可开通，<font color="red"><b>零预付，免年费</b></font>，单笔阶梯费率，无流量限制。<br/>
    												<a href="http://cloud.ecshop.com/payment_apply.php?mod=alipay" target="_blank"><font color="red">立即在线申请</font></a>';
    /* 支付方式名称*/
    $modules[$i]['pay_name']    = '支付宝';
    
    /* 是否支持货到付款 */
    $modules[$i]['is_cod']  = '0';

    /* 是否支持在线支付 */
    $modules[$i]['is_online']  = '1';
    
    /* 配置信息 */
    $modules[$i]['config']  = array(
        array('name' => '支付宝帐户','type' => 'text',   'value' => '','bs'=>$modules[$i]['code'].'_account'),
        array('name' => '交易安全校验码','type' => 'text',   'value' => '','bs'=>$modules[$i]['code'].'_key'),
        array('name' => '合作者身份ID','type' => 'text',   'value' => '','bs'=>$modules[$i]['code'].'_partner'),
        array('name' => '选择接口类型','type' => 'select','bs'=>$modules[$i]['code'].'_pay_method','tishi'=>'请选择您最后一次跟支付宝签订的协议里面说明的接口类型','value'=>'','xz' => array('使用标准双接口','使用担保交易接口','使用即时到帐交易接口'))
    );
    return;
}

/**
 * 类
 */
class alipay
{

    
    function ceshi()
    {
    	$order = array('order_sn'=>'牛仔很忙','log_id'=>'22','order_amount'=>15);
    	$payment = array('alipay_pay_method'=>0,'alipay_partner'=>'410881199211030760','alipay_account'=>'649619794@qq.com','alipay_key'=>'25365454');
    	$real_method = $payment['alipay_pay_method'];  //接口类型
    	switch ($real_method){
    		case '0':
    			$service = 'trade_create_by_buyer';//使用标准双接口
    			break;
    		case '1':
    			$service = 'create_partner_trade_by_buyer';//使用担保交易接口
    			break;
    		case '2':
    			$service = 'create_direct_pay_by_user';//使用即时到帐交易接口
    			break;
    	}
    
    	$extend_param = 'isv^sh22';
    
    	$parameter = array(
    			'extend_param'      => $extend_param, 
    			'service'           => $service, //接口类型
    			'partner'           => $payment['alipay_partner'], //合作者身份ID
    			//'partner'         => ALIPAY_ID,
    			'_input_charset'    => 'utf-8', //字符集，默认为GBK
    			'notify_url'        => '',//异步返回
    			'return_url'        => '',//同步返回
    			/* 业务参数 */
    			'subject'           => $order['order_sn'],//商品名称
    			'out_trade_no'      => $order['order_sn'] . $order['log_id'], //商品外部交易号，订单号，必填,每次测试都须修改
    			'price'             => $order['order_amount'],//商品单价，必填
    			'quantity'          => 1,//商品数量，必填
    			'payment_type'      => 1,// 默认为1,不需要修改
    			/* 物流参数 */
    			'logistics_type'    => 'EXPRESS',// 物流配送方式：POST(平邮)、EMS(EMS)、EXPRESS(其他快递)
    			'logistics_fee'     => 0, //物流配送费用
    			'logistics_payment' => 'BUYER_PAY_AFTER_RECEIVE',//物流配送费用付款方式：BUYER_PAY(买家支付)
    			/* 买卖双方信息 */
    			'seller_email'      => $payment['alipay_account'] //卖家邮箱，必填
    	);
    
    	ksort($parameter);
    	reset($parameter);
    
    	$param = '';
    	$sign  = '';
    
    	foreach ($parameter AS $key => $val)
    	{
    		$param .= "$key=" .urlencode($val). "&";
    		$sign  .= "$key=$val&";
    	}
    
    	$param = substr($param, 0, -1);
    	$sign  = substr($sign, 0, -1). $payment['alipay_key'];  //交易安全校验码
    	//$sign  = substr($sign, 0, -1). ALIPAY_AUTH;

    	//$button = '<div style="text-align:center"><input type="button" onclick="window.open(\'https://mapi.alipay.com/gateway.do?'.$param. '&sign='.md5($sign).'&sign_type=MD5\')" value="' .$GLOBALS['_LANG']['pay_button']. '" /></div>';
    	$button = '<input class="tjdd" value="提交订单"   type="button" onclick="window.open(\'https://mapi.alipay.com/gateway.do?'.$param. '&sign='.md5($sign).'&sign_type=MD5\')"/>';
    	return $button;
    }
    
    

    /**
     * 生成支付代码
     * @param   array   $order      订单信息
     * @param   array   $payment    支付方式信息
     */
    function get_code($order, $payment)
    {
        $real_method = $payment['alipay_pay_method'];  //接口类型
        switch ($real_method){
            case '0':
                $service = 'trade_create_by_buyer';//使用标准双接口
                break;
            case '1':
                $service = 'create_partner_trade_by_buyer';//使用担保交易接口
                break;
            case '2':
                $service = 'create_direct_pay_by_user';//使用即时到帐交易接口
                break;
        }

        $extend_param = 'isv^sh22';

        $parameter = array(
            'extend_param'      => $extend_param, //合作者身份ID
            'service'           => $service, //接口类型
            'partner'           => $payment['alipay_partner'],
            //'partner'           => ALIPAY_ID,
            '_input_charset'    => 'utf-8', //字符集，默认为GBK
            'notify_url'        => '',//return_url(basename(__FILE__, '.php')),//异步返回
            'return_url'        => '',//return_url(basename(__FILE__, '.php')),//同步返回   
            /* 业务参数 */
            'subject'           => $order['name'],//商品名称
            'out_trade_no'      => $order['name'] . $order['id'], //商品外部交易号，订单号，必填,每次测试都须修改
            'price'             => $order['money'],//商品单价，必填
            'quantity'          => 1,//商品数量，必填
            'payment_type'      => 1,// 默认为1,不需要修改
            /* 物流参数 */
            'logistics_type'    => 'EXPRESS',// 物流配送方式：POST(平邮)、EMS(EMS)、EXPRESS(其他快递)
            'logistics_fee'     => 0, //物流配送费用
            'logistics_payment' => 'BUYER_PAY_AFTER_RECEIVE',//物流配送费用付款方式：BUYER_PAY(买家支付)
            /* 买卖双方信息 */
            'seller_email'      => $payment['alipay_account'] //卖家邮箱，必填
        );

        ksort($parameter);
        reset($parameter);

        $param = '';
        $sign  = '';

        foreach ($parameter AS $key => $val)
        {
            $param .= "$key=" .urlencode($val). "&";
            $sign  .= "$key=$val&";
        }

        $param = substr($param, 0, -1);
        $sign  = substr($sign, 0, -1). $payment['alipay_key'];  //交易安全校验码
        //$sign  = substr($sign, 0, -1). ALIPAY_AUTH;

        //$button = '<div style="text-align:center"><input type="button" onclick="window.open(\'https://mapi.alipay.com/gateway.do?'.$param. '&sign='.md5($sign).'&sign_type=MD5\')" value="' .$GLOBALS['_LANG']['pay_button']. '" /></div>';
		$button = '<input class="tjdd" value="下一步"   type="button" onclick="window.open(\'https://mapi.alipay.com/gateway.do?'.$param. '&sign='.md5($sign).'&sign_type=MD5\')"/>';
        return $button;
    }

    
    function jobzf($money)
    {
    	$order = array('order_sn'=>'积分','log_id'=>time(),'order_amount'=>15);
    	$payment = array('alipay_pay_method'=>0,'alipay_partner'=>'410881199211030760','alipay_account'=>'649619794@qq.com','alipay_key'=>'25365454');
    	$real_method = $payment['alipay_pay_method'];  //接口类型
    	switch ($real_method){
    		case '0':
    			$service = 'trade_create_by_buyer';//使用标准双接口
    			break;
    		case '1':
    			$service = 'create_partner_trade_by_buyer';//使用担保交易接口
    			break;
    		case '2':
    			$service = 'create_direct_pay_by_user';//使用即时到帐交易接口
    			break;
    	}
    
    	$extend_param = 'isv^sh22';
    
    	$parameter = array(
    			'extend_param'      => $extend_param,
    			'service'           => $service, //接口类型
    			'partner'           => $payment['alipay_partner'], //合作者身份ID
    			//'partner'         => ALIPAY_ID,
    			'_input_charset'    => 'utf-8', //字符集，默认为GBK
    			'notify_url'        => '',//异步返回
    			'return_url'        => '',//同步返回
    			/* 业务参数 */
    			'subject'           => $order['order_sn'],//商品名称
    			'out_trade_no'      => $order['order_sn'] . $order['log_id'], //商品外部交易号，订单号，必填,每次测试都须修改
    			'price'             => $order['order_amount'],//商品单价，必填
    			'quantity'          => 1,//商品数量，必填
    			'payment_type'      => 1,// 默认为1,不需要修改
    			/* 物流参数 */
    			'logistics_type'    => 'EXPRESS',// 物流配送方式：POST(平邮)、EMS(EMS)、EXPRESS(其他快递)
    			'logistics_fee'     => 0, //物流配送费用
    			'logistics_payment' => 'BUYER_PAY_AFTER_RECEIVE',//物流配送费用付款方式：BUYER_PAY(买家支付)
    			/* 买卖双方信息 */
    			'seller_email'      => $payment['alipay_account'] //卖家邮箱，必填
    	);
    
    	ksort($parameter);
    	reset($parameter);
    
    	$param = '';
    	$sign  = '';
    
    	foreach ($parameter AS $key => $val)
    	{
    		$param .= "$key=" .urlencode($val). "&";
    		$sign  .= "$key=$val&";
    	}
    
    	$param = substr($param, 0, -1);
    	$sign  = substr($sign, 0, -1). $payment['alipay_key'];  //交易安全校验码
    	//$sign  = substr($sign, 0, -1). ALIPAY_AUTH;
    
    	//$button = '<div style="text-align:center"><input type="button" onclick="window.open(\'https://mapi.alipay.com/gateway.do?'.$param. '&sign='.md5($sign).'&sign_type=MD5\')" value="' .$GLOBALS['_LANG']['pay_button']. '" /></div>';
    	/*$button = '<input class="tjdd" value="立即充值"   type="button" onclick="window.open(\'https://mapi.alipay.com/gateway.do?'.$param. '&sign='.md5($sign).'&sign_type=MD5\')"/>';*/
    	$button = '<div class="w_100 h_35 l_m20 t_m5 l_h35 bc_E16400 c_FFF t_c f_l point"  onclick="window.open(\'https://mapi.alipay.com/gateway.do?'.$param. '&sign='.md5($sign).'&sign_type=MD5\')">下一步</div>';
    	return $button;
    }
    /**
     * 响应操作
     */
    function respond()
    {
        if (!empty($_POST))
        {
            foreach($_POST as $key => $data)
            {
                $_GET[$key] = $data;
            }
        }
        $payment  = get_payment($_GET['code']);
        $seller_email = rawurldecode($_GET['seller_email']);
        $order_sn = str_replace($_GET['subject'], '', $_GET['out_trade_no']);
        $order_sn = trim($order_sn);

        /* 检查数字签名是否正确 */
        ksort($_GET);
        reset($_GET);

        $sign = '';
        foreach ($_GET AS $key=>$val)
        {
            if ($key != 'sign' && $key != 'sign_type' && $key != 'code')
            {
                $sign .= "$key=$val&";
            }
        }

        $sign = substr($sign, 0, -1) . $payment['alipay_key'];
        //$sign = substr($sign, 0, -1) . ALIPAY_AUTH;
        if (md5($sign) != $_GET['sign'])
        {
            return false;
        }

        /* 检查支付的金额是否相符 */
        if (!check_money($order_sn, $_GET['total_fee'])){
            return false;
        }

        if ($_GET['trade_status'] == 'WAIT_SELLER_SEND_GOODS'){
            /* 改变订单状态 */
            order_paid($order_sn, 2);
            return true;
        }elseif ($_GET['trade_status'] == 'TRADE_FINISHED'){
            /* 改变订单状态 */
            order_paid($order_sn);
            return true;
        }elseif ($_GET['trade_status'] == 'TRADE_SUCCESS'){
            /* 改变订单状态 */
            order_paid($order_sn, 2);
            return true;
        } else{
            return false;
        }
    }
}

?>